const path = require("path");
const CompressionPlugin = require("compression-webpack-plugin");
// 开启 gzip 压缩也能极大加快页面加载速度。
//npm i compression-webpack-plugin@5.0.1

function resolve(dir) {
  return path.join(__dirname, dir);
}

// vue.config.js
module.exports = {
  publicPath: "./", // 部署应⽤包时的基本 URL
  outputDir: "dist", // npm run build ⽣成的⽂件夹，默认是dist
  assetsDir: "static", // 在kaixin⽂件夹下⾯⽣成static⽬录存放js,img,css等静态资源
  indexPath: "index.html", // ⽣成的单⽂件的，⽂件名，
  /*
    Vue-cli3:
    Crashed when using Webpack `import()` #2463
    https://github.com/vuejs/vue-cli/issues/2463
   */
  // 如果你不需要生产环境的 source map，可以将其设置为 false 以加速生产环境构建。
  // 在设置了这个属性之后，就不会生成map文件，map文件的作用在于：项目打包后，代码都是经过压缩加密的，如果运行时报错，
  // 输出的错误信息无法准确得知是哪里的代码报错。也就是说map文件相当于是查看源码的一个东西。
  // 如果不需要定位问题，并且不想被看到源码，就把productionSourceMap 置为false，既可以减少包大小，也可以加密源码。
  // 但是如果配置成true，会打包很长时间
  productionSourceMap: false,

  //打包app时放开该配置
  //publicPath:'./',
  configureWebpack: (config) => {
    //生产环境取消 console.log
    if (process.env.NODE_ENV === "production") {
      config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true;
    }
  },
  chainWebpack: (config) => {
    config.resolve.alias
      .set("@$", resolve("src"))
      .set("@api", resolve("src/api"))
      .set("@assets", resolve("src/assets"))
      .set("@comp", resolve("src/components"))
      .set("@views", resolve("src/views"))
      .set("@layout", resolve("src/layout"))
      .set("@static", resolve("src/static"))
      .set("@mobile", resolve("src/modules/mobile"));

    //生产环境，开启js\css压缩
    if (process.env.NODE_ENV === "production") {
      config.plugin("compressionPlugin").use(
        new CompressionPlugin({
          test: /\.js$|.\css|.\less/, // 匹配文件名
          threshold: 10240, // 对超过10k的数据压缩
          deleteOriginalAssets: false, // 不删除源文件
        })
      );
    }

    // 配置 webpack 识别 markdown 为普通的文件
    config.module
      .rule("markdown")
      .test(/\.md$/)
      .use()
      .loader("file-loader")
      .end();
  },

  // css: {
  // loaderOptions: {
  //   less: {
  //     modifyVars: {
  //       /* less 变量覆盖，用于自定义 ant design 主题 */
  //       'primary-color': '#1890FF',
  //       'link-color': '#1890FF',
  //       'border-radius-base': '4px',
  //     },
  //     javascriptEnabled: true,
  //   }
  // }
  // },
  css: {
    // 将组件内的 CSS 提取到一个单独的 CSS 文件 (只用在生产环境中)
    // 也可以是一个传递给 `extract-text-webpack-plugin` 的选项对象
    extract: true,
    // 是否开启 CSS source map？
    sourceMap: false,
    // 为预处理器的 loader 传递自定义选项。比如传递给
    // Css-loader 时，使用 `{ Css: { ... } }`。
    loaderOptions: {
      css: {
        // 这里的选项会传递给 css-loader
      },
      postcss: {
        // 这里的选项会传递给 postcss-loader
      },
    },
    // 为所有的 CSS 及其预处理文件开启 CSS Modules。
    // 这个选项不会影响 `*.vue` 文件。
    // modules: false,
  },

  devServer: {
    port: 3000,
    proxy: {
      /* '/api': {
        target: 'https://mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro', //mock API接口系统
        ws: false,
        changeOrigin: true,
        pathRewrite: {
          '/jeecg-boot': ''  //默认所有请求都加了jeecg-boot前缀，需要去掉
        }
      },*/
      "/jeecg-boot": {
        // target: 'http://localhost:8080', //请求本地 需要jeecg-boot后台项目
        target: "http://mf-dc.percent.cn/", //  // 线上环境
        // target: 'http://172.18.9.75:19801/', //  // 测试环境

        ws: false,
        changeOrigin: true,
      },
    },
  },

  lintOnSave: undefined,
};
